package org.phantom.securityframework.datapermission;
/**
 * 在需要进行数据权限过滤的controller上注解.按需配置数据权限框架即可工作
 * 拦截器会拦截到所有标有该注解的方法
 * @see com.comtex.datapermission.DataFilterAspect
 */
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataFilter {

	
	enum SEPARATOR{
		AND,OR
	}
	
	/**
	 * 此配置项配置使用哪种DataProvider进行数据过滤
	 * value有三种配置规则:
	 * 1.缺省:即默认配置,会执行com.cmetex.datapermission.internal.SimpleSqlDataProvider
	 * 2.mapper:按需配置,会执行com.cmetex.datapermission.internal.MapperDataProvider
	 * 3.自定义:按需配置,会执行自定义DataProvider
	 * 如果用自定义provider,此配置项必须与注册服务时的osgi-properties的filter值保持一致
	 * 
	 * 
	 * ***********************************************************************************
	 * 实例注册服务时定义filter:
	 * <osgi:service ref="userManager" interface="com.cmetex.datapermission.DataProvider">
			<osgi:service-properties>
				<entry key="filter" value="userManager"/>
			</osgi:service-properties>
		</osgi:service>
	 * 如果要使用此DataProvider,那么此参数配置userManager即可
	 * ***********************************************************************************
	 * 
	 * 
	 * 如果用自定义provider,其他参数都不用配置
	 * @see com.cmetex.datapermission.internal.SimpleSqlDataProvider
	 * @see com.cmetex.datapermission.internal.MapperDataProvider
	 * @return
	 */
	String value() default DataProviderResolver.DEFAULT_PROVIDER;
	/**
	 * 查询表名
	 * 
	 * 如果使用SimpleSqlDataProvider即value参数使用缺省配置时,必须配置table
	 * 只完成简单单表查询,复杂查询请使用mapper()或者自定义provider
	 * 此配置与mapper()互斥
	 * @return
	 */
	String table() default "";
	/**
	 * 数据库表映射Java类型
	 * 
	 * 如果使用SimpleSqlDataProvider即value参数使用缺省配置时,必须配置resultType
	 * 只完成简单单表查询,复杂查询请使用mapper()或者自定义provider
	 * 此配置与mapper()互斥
	 * @return
	 */
	String resultType() default "";
	/**
	 * mybatis-mapperId
	 * 如果使用SimpleSqlDataProvider即value参数使用"mapper"配置时,必须配置mapperId
	 * mapper[0]为数据过滤语句Id
	 * mapper[1]为查询条数语句Id
	 * 此配置与table(),resultType()互斥
	 * @return
	 */
	String[] mapper() default "";
	/**
	 * 查询条件逻辑运算符
	 * 如果使用SimpleSqlDataProvider即value参数使用缺省配置时,查询条件之间的逻辑运算符,默认为AND
	 * @return
	 */
	SEPARATOR separator() default SEPARATOR.AND;
}
